Valid word abbreviation¶
Time: O(N); Space: O(1); easy
Given a non-empty string word and an abbreviation abbr, return whether the string matches with the given abbreviation.
A string such as “word” contains only the following valid abbreviations:
[“word”, “1ord”, “w1rd”, “wo1d”, “wor1”, “2rd”, “w2d”, “wo2”, “1o1d”, “1or1”, “w1r1”, “1o2”, “2r1”, “3d”, “w3”, “4”]
Example 1:
Input: word = “internationalization”, abbr = “i12iz4n”
Output: True
Example 2:
Input: word = “apple”, abbr = “a2e”
Output: False
[1]:
class Solution1(object):
def validWordAbbreviation(self, word, abbr):
"""
:type word: str
:type abbr: str
:rtype: bool
"""
i , digit = 0, 0
for c in abbr:
if c.isdigit():
if digit == 0 and c == '0':
return False
digit *= 10
digit += int(c)
else:
if digit:
i += digit
digit = 0
if i >= len(word) or word[i] != c:
return False
i += 1
if digit:
i += digit
return i == len(word)
[2]:
s = Solution1()
word = "internationalization"
abbr = "i12iz4n"
assert s.validWordAbbreviation(word, abbr) == True
word = "apple"
abbr = "a2e"
assert s.validWordAbbreviation(word, abbr) == False